﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Persistencia;
using GestorDeFlotasModelo.Factorias;
using Persistencia.Interfaces;
namespace GestorDeFlotasModelo.Entities
{
    public partial class Factura : IPersistibleModelo, IIdentityEntity
    {
        PersistibleDB persistible;
        #region Miembros de IPersistibleModelo

        void IPersistibleModelo.CargarParametrosClave(HashTableNCSensitive parameters)
        {
            parameters.Add("Factura_Id", this.Id);
        }

        void IPersistibleModelo.CargarParametrosNoClave(HashTableNCSensitive parameters)
        {
            parameters.Add("Factura_Cliente", this.Cliente.Id);
            parameters.Add("Factura_Importe", this.Importe);
            parameters.Add("Factura_Fecha_Inicio", this.FechaInicio);
            parameters.Add("Factura_Fecha_Fin", this.FechaFin);
        }

        void IPersistibleModelo.Cargar(HashTableNCSensitive hts)
        {
            this.Id = int.Parse(hts["Factura_Id"].ToString());
            this.Importe = double.Parse(hts["Factura_Importe"].ToString());
            this.FechaInicio = DateTime.Parse(hts["Factura_Fecha_Inicio"].ToString());
            this.FechaFin = DateTime.Parse(hts["Factura_Fecha_Fin"].ToString());
            this.Cliente = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaCliente>().SelectXId<Cliente>(hts["Factura_Cliente"].ToString());
        }

        void IPersistibleModelo.AntesInsert() { }

        void IPersistibleModelo.AntesUpdate() { }

        void IPersistibleModelo.AntesDelete() { }

        void IPersistibleModelo.DespuesInsert() { }

        void IPersistibleModelo.DespuesUpdate() { }

        void IPersistibleModelo.DespuesDelete() { }

        string IPersistibleModelo.HashDatos
        {
            get { return this.Id.ToString()+this.Importe+this.FechaInicio.ToShortDateString()+this.FechaFin.ToShortDateString()+this.Cliente.Id; }
        }

        PersistibleDB IPersistibleModelo.Persistible
        {
            get
            {
                return this.persistible;
            }
            set
            {
                this.persistible = value;
            }
        }

        #endregion

        #region Miembros de IIdentityFactory

        long IIdentityEntity.Id
        {
            get
            {
                return this.Id;
            }
            set
            {
                this.Id = value;
            }
        }

        #endregion

        #region Miembros de IPersistible

        void IPersistible.Insert()
        {
            this.persistible.Insert();
        }

        void IPersistible.Update()
        {
            this.persistible.Update();
        }

        void IPersistible.Delete()
        {
            this.persistible.Delete();
        }

        #endregion
    }
}
